package com.answer.model.vo;

import cn.hutool.json.JSONUtil;
import com.answer.entity.Question;
import com.answer.model.dto.question.QuestionContentDTO;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 题目视图
 */
@Data
public class QuestionVO implements Serializable {

    /**
     * id
     */
    private Long id;

    /**
     * 题目内容（json格式）
     */
    private List<QuestionContentDTO> questionContent;

    /**
     * 应用 id
     */
    private Long appId;

    /**
     * 创建用户 id
     */
    private Long userId;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 创建用户信息
     */
    private UserVO user;

    /**
     * 封装类转对象
     *
     * @param questionVO 问题视图对象，作为转换的源对象
     * @return 转换后的问题对象，如果输入为null，则返回null
     */
    public static Question voToObj(QuestionVO questionVO) {
        // 检查输入对象是否为null，如果是则直接返回null
        if (questionVO == null) {
            return null;
        }
        // 创建一个新的问题对象
        Question question = new Question();
        // 使用BeanUtils工具类将questionVO的属性值复制到question对象中
        BeanUtils.copyProperties(questionVO, question);
        // 获取问题内容列表
        List<QuestionContentDTO> questionContentDTO = questionVO.getQuestionContent();
        // 将问题内容列表转换为JSON字符串，并设置到问题对象中
        question.setQuestionContent(JSONUtil.toJsonStr(questionContentDTO));
        // 返回转换后的问题对象
        return question;
    }

    /**
     * 将Question对象转换为QuestionVO对象
     *
     * @param question 需要转换的Question对象
     * @return 转换后的QuestionVO对象，如果输入为null，则返回null
     */
    public static QuestionVO objToVo(Question question) {
        // 检查输入对象是否为空
        if (question == null) {
            return null;
        }
        // 创建VO对象实例
        QuestionVO questionVO = new QuestionVO();
        // 使用BeanUtils工具类复制对象属性
        BeanUtils.copyProperties(question, questionVO);
        // 获取问题内容
        String questionContent = question.getQuestionContent();
        // 检查问题内容是否为空
        if (questionContent != null) {
            // 将问题内容字符串转换为列表并设置到VO对象中
            questionVO.setQuestionContent(JSONUtil.toList(questionContent, QuestionContentDTO.class));
        }
        // 返回转换后的VO对象
        return questionVO;
    }
}

